 /**
 * Andio an-player music Main
 * author: Ziiber
 * time  : 2015.5.27
 */
function ListenMusic(params)
{
	/* 公共属性 */
	Audio.prototype.plugName 		=	'Recall';		// 名称
	Audio.prototype.author   		=	'Ziiber';		// 作者
	Audio.prototype.version  		=	'1.0.1505.23';	// 版本号
	Audio.prototype.private_error  	=	'';				// 最后一次错误记录

	/**
	 * 时间转换 - 秒到时分
	 * @param  {[type]} s    秒数
	 * @param  {[type]} c    连接符，默认 :
	 * @param  {[type]} hour 时 默认 false
	 * @return {[type]}      [description]
	 */
	Audio.prototype.time_s2m = function(s, c, hour)
	{
		c = c ? c : ':'; // 连接符号

	    // 计算
	    var h = 0, i = 0, arr = [];
	    if( s > 60 )
	    {
	        i = parseInt( s / 60 );
	        s = parseInt( s % 60 );
	        if( i > 60 ) 
	        {
	            h = parseInt(i/60);
	            i = parseInt(i%60);
	        }
	    }

	    // 补零
	    var zero = function(v)
	    {
	        return ( v>>0 ) < 10 ? "0"+v:v;
	    };

	    if( hour )
	    	arr = [zero(h),zero(i),zero(s)];
	    else
	    	arr = [zero(i),zero(s)];
	    
	    return arr.join(c);
	};

	/**
	 * 歌词解析
	 * @param  {[type]} lrc lrc歌词
	 * @param  {[type]} ms  精确到毫秒  默认false
	 * @return {[type]}     返回lrc信息对象
	 */
	Audio.prototype.analysisLrc = function(lrc, ms)
	{
		var lrcLine = []; // 行数组
		var lineSum = 0; // 总行数
		var regexpLineTime    = /\[(\d{2})\:(\d{2})([\:|\.](\d{2})){0,1}\]/gi; // 匹配行时间
		var regexpLineTimeArr = /\[(\d{2})\:(\d{2})([\:|\.](\d{2}))?\]/; // 匹配时间子元素

		var regexpLineText = /\](?!\[)(.*)/; // 匹配歌词
		var lrcLineTimeArr = [], lrcLineTime = [], lrcLineText = '';

		var lrcObj = {
			ti:'',		// 歌曲名
			ar:'',		// 演唱
			al:'',		// 专辑
			by:'',		// 编辑
			list:[],	// 歌词列表
			offset:0	// 时间补偿值 其单位是毫秒
		};

		// 分割歌词行
		lrcLine = lrc.split(/.*\n/);
		lineSum = lrcLine.length;

		for( var i=0; i<lineSum; i++ )
		{
			/* 循环一次 一条歌词 */
			lrcLineTime = [];
			lrcLineText = '';
			var time = 0;

			lrcLineTime = lrcLine[i].match(regexpLineTime);
			lrcLineText = lrcLine[i].match(regexpLineText);
			
			if(lrcLineTime!=null)
			{
				var number = lrcLineTime.length;

				for( var a=0; a<number; a++ )
				{
					lrcLineTimeArr = lrcLineTime[a].match(regexpLineTimeArr);

					if( typeof(lrcLineTimeArr[4]) != 'undefined')
					{
						if(ms)
							time = Number(lrcLineTimeArr[1])*60 + Number(lrcLineTimeArr[2]) + Number(lrcLineTimeArr[4])/1000;
						else
							time = Number(lrcLineTimeArr[1])*60 + Number(lrcLineTimeArr[2]);
					}
					else
						time = Number(lrcLineTimeArr[1])*60 + Number(lrcLineTimeArr[2]);

					time += (lrcObj.offset/1000);	// 时间补偿值
					
					lrcObj.list.push({"time":time,"text":lrcLineText[1]});	// 添加到歌词列表
				}
			}
			else
			{
				if( lrcLine[i].length > 4 )
				{
					/* 收集歌词信息 */
					var ti 		= /\[ti\:(.*)\]/;
					var ar 		= /\[ar\:(.*)\]/;
					var al 		= /\[al\:(.*)\]/;
					var by 		= /\[by\:(.*)\]/;
					var offset 	= /\[offset\:(.*)\]/;

					if( ti.test(lrcLine[i]) )
						lrcObj.ti = lrcLine[i].match(ti)[1];			// 歌名
					else if( ar.test(lrcLine[i]) )
						lrcObj.ar = lrcLine[i].match(ar)[1];			// 演唱
					else if( al.test(lrcLine[i]) )
						lrcObj.al = lrcLine[i].match(al)[1];			// 专辑
					else if( by.test(lrcLine[i]) )
						lrcObj.by = lrcLine[i].match(by)[1];			// lrc制作者
					else if( offset.test(lrcLine[i]) )
						lrcObj.offset = lrcLine[i].match(offset)[1];	// 时间补偿值
				}
			}
		}
		// 歌词时间排序
		lrcObj.list.sort( function(e, x){ return (e.time-x.time); } );

		// console.log(lrcObj);
		return lrcObj;
	};


	/* 获取本地存储对象 */
	Audio.prototype.getStorage = function()
	{
		var local = 
		{
			getItem:function(key)
			{
				var value = localStorage.getItem(key);
				return JSON.parse(value);
			},
			setItem:function( key, value )
			{
				localStorage.setItem( key, JSON.stringify(value) );
			},
			removeItem:function( key )
			{
				localStorage.removeItem( key );
			}
		};
		return local;
	};

	/* 监听事件 */
    Audio.prototype.listenEvent = function(type, e)
    {
    	/*
		loadstart		//客户端开始请求数据
		progress		//客户端正在请求数据
		suspend			//延迟下载
		abort			//客户端主动终止下载（不是因为错误引起），
		error			//请求数据时遇到错误
		stalled			//网速失速
		play			//play()和autoplay开始播放时触发
		pause			//pause()触发
		loadedmetadata	//成功获取资源长度
		loadeddata		//
		waiting			//等待数据，并非错误
		playing			//开始回放
		canplay			//可以播放，但中途可能因为加载而暂停
		canplaythrough 	//可以播放，歌曲全部加载完毕
		seeking			//寻找中
		seeked			//寻找完毕
		timeupdate		//播放时间改变
		ended			//播放结束
		ratechange		//播放速率改变
		durationchange	//资源长度改变
		volumechange	//音量改变
		*/
		this.addEventListener(type, e);
	};

	/**
	 * 记录日志 - 插件运行轨迹
	 * @param  {[type]} message [description]
	 * @param  {[type]} type    [description]
	 * @return {[type]}         [description]
	 */
	Audio.prototype.setlog = function(message, type)
	{
		var type = arguments[1] ? arguments[1] : 'system';

		switch(type)
		{
			case 'system':
				console.log(Audio.prototype.plugName + ': ' + message);
				break;
			case 'other':
				console.log(Audio.prototype.plugName + 'other: ' + message);
				break;
			case 'error':
				console.log(Audio.prototype.plugName + 'Error: ' + message);
				break;
			default :
				console.log(message);
		}
	};


	/* 加载歌曲列表 */
	Audio.prototype.loadMusicList = function(objList, e, error)
	{
		if(typeof objList == 'objList'){
 
		}else{
			this.setlog();
		}
	};

	/**
	 * 设置偏好配置
	 */
	Audio.prototype.config_Default = function()
	{
		var p_Storage = this.getStorage(); // 获取本地数据存储对象 Storage

		if( typeof(p_Storage.zVolume ) != 'undefined' ){
			// 存在音量配置
			this.volume = p_Storage.zVolume.volume;
		}else{
			// 不存在，采用默认配置
			this.volume = 0.4;
		}
	};

	var privateAudio = new Audio();

	// 初始化对象
	privateAudio.config_Default();

	/* 返回实例 */
	return privateAudio;
}

var MusicEngine = function()
{
	var self = new Audio();
	


}
